package anthology.daily_question._25_01;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//https://leetcode.cn/problems/intersection-of-two-arrays-ii/description/?envType=daily-question&envId=2025-01-30
public class _0350两个数组的交集2 {
    class Solution {
        public int[] intersect(int[] nums1, int[] nums2) {
            Map<Integer, Integer> cnt = new HashMap<>();
            for (int x : nums1) {
                cnt.merge(x, 1, Integer::sum); // cnt[x]++
            }
            List<Integer> ans = new ArrayList<>();
            for (int x : nums2) {
                int c = cnt.getOrDefault(x, 0);
                if (c > 0) {
                    cnt.put(x, c - 1);
                    ans.add(x);
                }
            }
            // 由于返回值是 int[]，需要额外遍历一次
            return ans.stream().mapToInt(i -> i).toArray();
        }
    }
}
